package cn.wolfcode.trip.base.mapper;

import cn.wolfcode.trip.base.domain.Travel;
import cn.wolfcode.trip.base.query.CollectionQuery;
import cn.wolfcode.trip.base.query.TravelQuery;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface TravelMapper {
    int deleteByPrimaryKey(Long id);

    int insert(Travel entity);

    Travel selectByPrimaryKey(Long id);

    List<Travel> selectAll();

    int updateByPrimaryKey(Travel entity);

    /**
     * 根据条件查询所有的游记
     * @param qo
     * @return
     */
    List<Travel> selectForList(TravelQuery qo);

    /**
     * 更新游记的状态
     * @param travel
     */
    void updateState(Travel travel);

    /**qiuyanquan
     * 查询所有已收藏的游记
     * @param qo
     * @return
     */
    List<Travel> selectTravel(CollectionQuery qo);

    /**qiuyanquan
     * 游记是否已经被收藏
     * @param travelId
     * @param userId
     * @return
     */
    Integer getCollectionById(@Param("travelId") Long travelId,
                              @Param("userId") Long userId,
                              @Param("type") int type);

    /**qiuyanquan
     * 添加收藏
     * @param travelId
     * @param userId
     * @param type
     */
    void save(@Param("travelId") Long travelId,
              @Param("userId") Long userId,
              @Param("type") int type);

    /**qiuyanquan
     * 取消收藏
     * @param id
     * @param userId
     * @param type
     */
    void dalete(@Param("id") Long id,
                @Param("userId") Long userId,
                @Param("type") int type);

    /**qiuyanquan
     * 是否已经点赞
     * @param travelId
     * @param userId
     * @param type
     * @return
     */
    Integer getPraiseById(@Param("travelId") Long travelId,
                          @Param("userId") Long userId,
                          @Param("type") int type);

    /**qiuyanquan
     * 添加点赞
     * @param travelId
     * @param userId
     * @param type
     */
    void savePraise(@Param("travelId") Long travelId,
                    @Param("userId") Long userId,
                    @Param("type") int type);

    /**qiuyanquan
     * 取消点赞
     * @param id
     * @param userId
     * @param type
     */
    void daletePraise(@Param("id") Long id,
                      @Param("userId") Long userId,
                      @Param("type") int type);

    /**qiuyanquan
     * 点赞总数
     * @param travelId
     * @param type
     * @return
     */
    Integer getPraiseNum(@Param("travelId") Long travelId, @Param("type") int type);

    List<Map> selectPraiseNum(@Param("travelId") Long[] travelId, @Param("type") int type);

    /**
     * 查询用户的游记数量
     * @param userId
     * @return
     */
    int getTravelNum(Long userId);
}